﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MakeIT.Deo.Negocios;
using System.Data.Entity;
using System.IO;

namespace MakeIT.Deo.Apresentacao
{
    public partial class CadastroDebito : System.Web.UI.Page
    {
        usuario usuarioVO = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            usuarioVO = (usuario)this.Session["userActive"];

            if (!IsPostBack)
            {
                Util.HabilitarCampos(false, this.panelCad);
                setDdlClienteDataSource();
            }

        }

        protected void setDdlClienteDataSource()
        {
            ClienteBO clienteBO = new ClienteBO();
            List<cliente> listCliente = clienteBO.RecuperaCliente(true);
            foreach (cliente clienteVO in listCliente)
            {
                if (clienteVO.Tipo.Equals("PF"))
                    clienteVO.Nome = clienteVO.Nome+" "+clienteVO.Sobrenome+" (PF)";
                else
                    clienteVO.Nome = clienteVO.NomePJ + " (PJ)";
            }
            this.ddlbCliente.DataSource = listCliente;
            this.ddlbCadCliente.DataSource = this.ddlbCliente.DataSource;
            this.ddlbCliente.DataBind();
            this.ddlbCadCliente.DataBind();

            if (this.ddlbCadCliente.Items.Count == 0)
            {
                this.btnNovo.Enabled = false;
            }
            else
            {
                ListItem lt = new ListItem("", "");
                lt.Selected = true;
                this.ddlbCliente.Items.Add(lt);
            }

        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnSalvar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            debito debitoVO = null;
            DebitoBO debitoBO = null;
            bool novoRegistro = false;

            try
            {
                //Cria objeto
                debitoBO = new DebitoBO();

                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadId.Text))
                {
                    debitoVO = new debito();
                    debitoVO.Cadastro = DateTime.Now;
                    debitoVO.CadastradoPor = usuarioVO.User;
                    debitoVO.Status = "Em aberto";

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    debitoVO = debitoBO.RecuperaDebito(Int32.Parse(this.txtCadId.Text));

                }

                debitoVO.Descricao = this.txtCadDesc.Text;
                debitoVO.IdCliente = int.Parse(this.ddlbCadCliente.SelectedValue);
                debitoVO.NomeCliente = this.ddlbCadCliente.SelectedItem.Text;
                debitoVO.Valor = decimal.Parse(this.txtCadValor.Text);

                debitoVO.Edicao = DateTime.Now;
                debitoVO.EditadoPor = usuarioVO.User;

                //Chama metodo para salvar ou criar novo registro
                debitoBO.SalvarDebito(debitoVO, novoRegistro);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltSituacao.Text = "";
                this.ltHistorico.Text = "";
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";

                // Trava bot&atilde;o de edi&ccedil;&atilde;o
                this.btnEditar.Enabled = false;

                // Trava bot&atilde;o de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o bot&atilde;o salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

                Util.HabilitarCampos(false, this.panelCad);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisa_Click(object sender, EventArgs e)
        {

            //Declara objetos
            int? idDebito = null;
            int? idCliente = null;
            string desc = null;

            try
            {
                if (!string.IsNullOrEmpty(this.txtId.Text))
                {
                    idDebito = Int32.Parse(this.txtId.Text);
                }

                if (!string.IsNullOrEmpty(this.txtDescricao.Text))
                {
                    desc = this.txtDescricao.Text;
                }

                if (!string.IsNullOrEmpty(this.ddlbCliente.SelectedValue))
                {
                    idCliente = int.Parse(this.ddlbCliente.SelectedValue);
                }

                //
                this.grvResultado.DataSource = new DebitoBO().RecuperaDebito(idDebito, idCliente, desc);

                //Vincula os dados
                this.grvResultado.DataBind();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            this.tabDebito.ActiveTabIndex = 0;

            // Desabilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(false, this.panelCad);

            // Destrava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text) && (string.IsNullOrEmpty(this.ltSituacao.Text) || this.ltSituacao.Text.Equals("Em aberto"));

            // Detrava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text) && (string.IsNullOrEmpty(this.ltSituacao.Text) || this.ltSituacao.Text.Equals("Em aberto") || this.ltSituacao.Text.Equals("Completo"));

            // Detrava bot&atilde;o de novo
            this.btnNovo.Enabled = (this.ddlbCadCliente.Items.Count>0);

            // Desabilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = false;

        }

        protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            DebitoBO debitoBO = null;
            debito debitoVO = null;
            int idDebito = 0;

            try
            {
                // cria objeto
                debitoBO = new DebitoBO();

                //
                idDebito = int.Parse(((ImageButton)sender).CommandArgument);

                //
                debitoVO = debitoBO.RecuperaDebito(idDebito); ;

                this.txtCadId.Text = idDebito.ToString();
                this.txtCadDesc.Text = debitoVO.Descricao;
                this.txtCadValor.Text = debitoVO.Valor.ToString();
                this.ddlbCadCliente.SelectedValue = debitoVO.IdCliente.ToString();

                this.ltSituacao.Text = debitoVO.Status;
                this.ltHistorico.Text = (debitoVO.Historico==null?"":debitoVO.Historico.Replace("\n","<br />"));
                this.ltCadastradoPor.Text = debitoVO.CadastradoPor;
                this.ltEditadoPor.Text = debitoVO.EditadoPor;
                this.ltDataCadastro.Text = ((DateTime)debitoVO.Cadastro).ToString();
                this.ltDataEdicao.Text = (debitoVO.Edicao == null ? "" : ((DateTime)debitoVO.Edicao).ToString());

                //
                this.tabDebito.ActiveTabIndex = 1;

                //
                Util.HabilitarCampos(false, this.panelCad);

                //
                this.btnSalvar.Enabled = false;

                //
                this.btnEditar.Enabled = string.IsNullOrEmpty(this.ltSituacao.Text) || this.ltSituacao.Text.Equals("Em aberto");

                //
                this.btnExcluir.Enabled = string.IsNullOrEmpty(this.ltSituacao.Text) || this.ltSituacao.Text.Equals("Em aberto") || this.ltSituacao.Text.Equals("Completo");

                //
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento editar do web form
        /// </summary>
        /// <param name="sender">Objeto disparador de evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = false;

            // Trava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = false;

            // Trava bot&atilde;o de novo
            this.btnNovo.Enabled = false;

            // Habilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = true;

            this.txtCadDesc.Focus();

        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCad);

            this.ltSituacao.Text = "";
            this.ltHistorico.Text = "";
            this.ltCadastradoPor.Text = "";
            this.ltEditadoPor.Text = "";
            this.ltDataCadastro.Text = "";
            this.ltDataEdicao.Text = "";

            // Habilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = false;

            // Trava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = false;

            // Trava bot&atilde;o de novo
            this.btnNovo.Enabled = false;

            // Habilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = true;

            this.txtCadDesc.Focus();

        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            debito debitoVO = null;
            DebitoBO debitoBO = null;

            try
            {
                //Cria objeto
                debitoBO = new DebitoBO();
                debitoVO = new debito();

                debitoVO.IdDebito = Int32.Parse(this.txtCadId.Text);

                //Chama metodo para salvar ou criar novo registro
                debitoBO.DeletaDebito(debitoVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltSituacao.Text = "";
                this.ltHistorico.Text = "";
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";


                // Trava bot&atilde;o de edi&ccedil;&atilde;o
                this.btnEditar.Enabled = false;

                // Trava bot&atilde;o de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o bot&atilde;o salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
            
        }
    }
}
